package ar.uade.distribuidas.tpo.cpe.dao;



import org.w3c.dom.Document;
import org.w3c.dom.Element;





import ar.uade.distribuidas.tpo.base.dominiodto.CondicionDeVentaDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.PoliticaDTO;

public class CondicionDeVentaXmlParser {
        /*private static CondicionDeVentaXmlParser instancia;

        public static CondicionDeVentaXmlParser getInstancia(){
                if(instancia == null){
                        instancia = new CondicionDeVentaXmlParser();
                        
                }
                return instancia;
        }
        
*/


                /*
        public Set<CondicionDeVenta> recuperarCondicionDeVentas(){
                Set<CondicionDeVenta> CondicionDeVentas = new HashSet<CondicionDeVenta>();
                NodeList nodos = doc.getElementsByTagName("CondicionDeVenta");
                for(int i = 0; i < nodos.getLength(); i++){
                        if(nodos.item(i).hasChildNodes()){
                                CondicionDeVentas.add(mapUCondicionDeVenta((Element)nodos.item(i)));
                        }
                }
                return CondicionDeVentas;
        }
        */
        
        
        
        /*public List<String> getParameterListFromObjectString(String line){ 
                
                List<String> result = new LinkedList<>();
                int i = line.indexOf('=');
                result.add(line.substring(line.indexOf('['),i));
                
                while (i<line.length()){
                        
                        result.add(line.substring(line.indexOf (',',i), line.indexOf(ch) 
                        
                }
                
                return null;
                
        }
        */
	public static CondicionDeVentaDTO parseCDV(Element auxElem) {
		CondicionDeVentaDTO condicion = new CondicionDeVentaDTO();
		
		String tipoDeCDV = auxElem.getTagName();
		condicion.setNombre(tipoDeCDV);
		
		if (tipoDeCDV.equalsIgnoreCase("Contado")) {

			Float descuento = Float.parseFloat(auxElem.getElementsByTagName("Descuento").item(0).getTextContent());
			condicion.setPlazo(0);
			condicion.setPorcentaje(descuento);
			
		} else if (tipoDeCDV.equalsIgnoreCase("Financiación") || tipoDeCDV.equalsIgnoreCase("Financiacion")) {
			
			int plazo = Integer.parseInt(auxElem.getElementsByTagName("CantidadDias").item(0).getTextContent());
			Float recargo = Float.parseFloat(auxElem.getElementsByTagName("Recargo").item(0).getTextContent());
			condicion.setPlazo(plazo);
			condicion.setPorcentaje(recargo);
		} 
		
		return condicion;
	}
	
	public static void escribirCondicionDeVenta(CondicionDeVentaDTO condicionDeVentaDTO, Element root){
        
        Document doc = root.getOwnerDocument();
        Element padre = doc.createElement("CondicionesDeVenta");
        root = doc.getDocumentElement();
        Element condicion = doc.createElement(condicionDeVentaDTO.getNombre());
        
        if (condicionDeVentaDTO.getNombre().equalsIgnoreCase("Contado")) {
        	Element descuento = doc.createElement("Descuento");
        	descuento.setTextContent(String.valueOf(condicionDeVentaDTO.getPorcentaje()));
        	condicion.appendChild(descuento);
        	
        } else if (condicionDeVentaDTO.getNombre().equalsIgnoreCase("Financiacion") 
        		|| condicionDeVentaDTO.getNombre().equalsIgnoreCase("Financiación")) {
        	Element recargo = doc.createElement("Recargo");
        	recargo.setTextContent(String.valueOf(condicionDeVentaDTO.getPorcentaje()));
        	condicion.appendChild(recargo);
        	
        	Element plazo = doc.createElement("CantidadDias");
        	plazo.setTextContent(String.valueOf(condicionDeVentaDTO.getPorcentaje()));
        	condicion.appendChild(plazo);
        }
        
        padre.appendChild(condicion);
	}

	
//        public static void parsearCondicionDeVentas(CondicionDeVentaDTO condicionDeVentaDTO, Element root){
//            
//            Document doc = root.getOwnerDocument();
//            Element padre = doc.createElement("CondicionesDeVenta");
//            root = doc.getDocumentElement();
//            Element condicion = doc.createElement(condicionDeVentaDTO.getNombre());
//            
//            if (condicionDeVentaDTO.getNombre().equalsIgnoreCase("Contado")) {
//            	Element descuento = doc.createElement("Descuento");
//            	descuento.setTextContent(String.valueOf(condicionDeVentaDTO.getPorcentaje()));
//            	condicion.appendChild(descuento);
//            	
//            } else if (condicionDeVentaDTO.getNombre().equalsIgnoreCase("Financiacion") 
//            		|| condicionDeVentaDTO.getNombre().equalsIgnoreCase("Financiación")) {
//            	Element recargo = doc.createElement("Recargo");
//            	recargo.setTextContent(String.valueOf(condicionDeVentaDTO.getPorcentaje()));
//            	condicion.appendChild(recargo);
//            	
//            	Element plazo = doc.createElement("CantidadDias");
//            	plazo.setTextContent(String.valueOf(condicionDeVentaDTO.getPorcentaje()));
//            	condicion.appendChild(plazo);
//            }
//            
//            padre.appendChild(condicion);
//            
//            
//            if(condicionDeVentaDTO.getPoliticas()!= null && !condicionDeVentaDTO.getPoliticas().isEmpty()){  
//           	 Element politicaEl, porcentajeElem;        
//           	 
//           	 //El string de una politica viene as�: Financiacion [id=1, recargo=4.0, dias=10]
//                    for(PoliticaDTO polit : condicionDeVentaDTO.getPoliticas()){
//                    		String lineaParametros = polit.toString();
//                    		lineaParametros = lineaParametros.replaceAll(" ", "");//quito los espacios en blanco que rompen en XML
//                    		politicaEl = doc.createElement(lineaParametros.substring(0, lineaParametros.indexOf('[')).replace("DTO", ""));
//                            padre.appendChild(politicaEl);                                                   
//                            lineaParametros = lineaParametros.substring(lineaParametros.indexOf('['), lineaParametros.indexOf(']'));
//                            String[] params = lineaParametros.split(",");
//                            for(int n = 1; n < params.length; n++){ //empiezo por el 2do el porcentaje que se parsea despues
//                           	 	//String aux1 = params[n].split("=")[0];
//                           	 	//String aux2= params[n].split("=")[1];
//                            	politicaEl.setAttribute(params[n].split("=")[0], params[n].split("=")[1]);
//                            }
//                            
//                            if(polit.getPorcentaje() > 0)
//                           	 porcentajeElem = doc.createElement("Recargo");
//                            else
//                           	 porcentajeElem = doc.createElement("Descuento");
//                            
//                            porcentajeElem.setTextContent(String.valueOf(polit.getPorcentaje()).replaceAll("-", ""));
//                            politicaEl.appendChild(porcentajeElem);
//                     
//                    }
//            }
//            
//            root.appendChild(padre);
//    }


}
